package com.dimples.dd.system.mapper;

import com.dimples.dd.common.pojo.PageResult;
import com.dimples.dd.mybatis.core.mapper.BaseMapperX;
import com.dimples.dd.mybatis.core.query.LambdaQueryWrapperX;
import com.dimples.dd.system.enums.logger.LoginResultEnum;
import com.dimples.dd.system.model.entity.SystemLoginLogDO;
import com.dimples.dd.system.model.query.LoginLogPageQuery;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface SystemLoginLogMapper extends BaseMapperX<SystemLoginLogDO> {

    /**
     * 分页查询登录日志
     *
     * @param pageQuery 查询参数
     * @return PageResult
     */
    default PageResult<SystemLoginLogDO> selectPage(LoginLogPageQuery pageQuery) {
        LambdaQueryWrapperX<SystemLoginLogDO> query = new LambdaQueryWrapperX<SystemLoginLogDO>()
                .likeIfPresent(SystemLoginLogDO::getUserIp, pageQuery.getUserIp())
                .likeIfPresent(SystemLoginLogDO::getUsername, pageQuery.getUsername())
                .betweenIfPresent(SystemLoginLogDO::getCreateTime, pageQuery.getCreateTime());
        if (Boolean.TRUE.equals(pageQuery.getStatus())) {
            query.eq(SystemLoginLogDO::getResult, LoginResultEnum.SUCCESS.getResult());
        } else if (Boolean.FALSE.equals(pageQuery.getStatus())) {
            query.gt(SystemLoginLogDO::getResult, LoginResultEnum.SUCCESS.getResult());
        }
        query.orderByDesc(SystemLoginLogDO::getId); // 降序
        return selectPage(pageQuery, query);
    }
}